<?php

namespace Admin\Model;

use Zend\Db\TableGateway\AbstractTableGateway;
use Zend\Db\Adapter\Adapter;
use Zend\Db\ResultSet\ResultSet;
use Zend\Db\Sql\Select;
use Zend\Db\Sql\Sql;
use Zend\Crypt\Password\Bcrypt;
use Zend\Session\Container;
use Zend\Http\Client;
use Zend\Db\Sql\Where;
use Zend\Paginator\Adapter\DbSelect;
use Zend\Paginator\Paginator;

class CategoriesTable extends AbstractTableGateway
{
    protected $table = 'tbl_categories';

    public function __construct(Adapter $adapter)
    {
        $this->adapter = $adapter;
        $this->resultSetPrototype = new ResultSet();
        $this->resultSetPrototype->setArrayObjectPrototype(new Categories());

        $this->initialize();
    }

    /*
    public function fetchAll()
    {
        $resultSet = $this->select();
        return $resultSet;
    }
    */
    //*****
//**********************************************************************************************//
//*****

    public function getAll()
    {
        $cate = array();
        $resultSet = $this->select();
        foreach ($resultSet as $value) 
        {
            $cate[] = $value;
        }
        return $cate;
    }


    public function getcatebyid($id)
    {
        $select = new Select('tbl_categories');
        $select->where(array('categories_id'=>$id));
            // tạo ra một kết quả mới thiết lập dựa trên các thực thể Album
        $resultSetPrototype = new ResultSet();
        $resultSetPrototype->setArrayObjectPrototype(new Categories());
        //tạo ra một bộ chuyển đổi mới pagination đối tượng
        $paginatorAdapter = new DbSelect(
            // cấu hình chọn đối tượng
            $select,
            //các bộ chuyển đổi để chạy nguoc lại
            $this->getAdapter(),
            $resultSetPrototype
            );
        $Paginator =  new Paginator($paginatorAdapter);
        
        
        return $Paginator;
    }


     public function getbyname($str)
    {


        $sql = new Sql($this->adapter);
        $select = $sql->select();
        $select->from ('tbl_categories');
        $where= new Where();
        $where->like('name','%'.$str.'%');
        $select->where($where);
        $select->order('categories_id DESC');
        $selectString = $sql->prepareStatementForSqlObject($select);
        $results = $selectString->execute();

        
        $resultSetPrototype = new ResultSet();
        $resultSetPrototype->setArrayObjectPrototype(new Categories());
        $paginatorAdapter = new DbSelect(
            $select,
            $this->getAdapter(),
            $resultSetPrototype
            );
        $Paginator =  new Paginator($paginatorAdapter);
        return $Paginator;
    }







    public function fetchAll() 
    {
       // tạo ra một Chọn đối tượng mới cho album bảng 
            $select = new Select('tbl_categories');
            // tạo ra một kết quả mới thiết lập dựa trên các thực thể Album
            $resultSetPrototype = new ResultSet();
            $resultSetPrototype->setArrayObjectPrototype(new Categories());
            //tạo ra một bộ chuyển đổi mới pagination đối tượng
            $paginatorAdapter = new DbSelect(
                // cấu hình chọn đối tượng
                $select,
                //các bộ chuyển đổi để chạy nguoc lại
                $this->getAdapter(),
                $resultSetPrototype
                );
            $Paginator =  new Paginator($paginatorAdapter);
            
            
            return $Paginator;
    }

    public function getCategories($id)
    {
        $id = (int) $id;
        $rowset = $this->select(array('categories_id' => $id));
        $row = $rowset->current();
        if (!$row) {
            throw new \Exception("Could not find row $id");
        }
        return $row;
    }


  


    public function saveCategories(Categories $categories)
    {
        $data = array();
        foreach ($categories as $key => $value) {
            if($value !=null)
            {
                $data[$key] = $value;
            }
        }

        $id  = (isset($data['categories_id']))  ? $data['categories_id'] : null;
        if ($id == null) {
            return $this->insert($data);
        } 
        else 
        {   
            return $this->update($data, array('categories_id' => $id));
        }
    }

    



//*********************************************************************************//
}